nameof 是消滅魔術字串 的好武器
我們先來看看下面的範例Code
void Main()
{
var gil = new Gil(100);
$"Gil Amount : {gil.Amount},CurrencyName : {gil.CurrencyName}".Dump();
$"{nameof(Gil)} {nameof(Gil.Amount)} : {gil.Amount},{nameof(Gil.CurrencyName)} : {gil.CurrencyName}".Dump();
}
public class Gil
{
public int Amount { get; set; }
public string CurrencyName { get; } = "GD";
public Gil(int amount)
{
Amount = amount;
}
}
雖然一開始看到套nameof寫起來是很繁瑣但是 遇到修改的時候 用IDE重構後
當初寫nameof的價值就跑出來了
忽然間 老闆說Gil太冷門了 沒有知道那是貨幣於是重新命名
CurrencyName 太不專業 應該有更專業的名稱
就改成下面的範例Code
void Main()
{
var gil = new GilCurrency(100);
$"Gil Amount : {gil.Amount},CurrencyName : {gil.Acronym}".Dump();
$"{nameof(GilCurrency)} {nameof(GilCurrency.Amount)} : {gil.Amount},{nameof(GilCurrency.Acronym)} : {gil.Acronym}".Dump();
}
public class GilCurrency
{
public int Amount { get; set; }
public string Acronym { get; } = "GD";
public GilCurrency(int amount)
{
Amount = amount;
}
}
這時候還要在去修改寫死的字串 如果是 nameof 就都不用改了 對吧
nameof VS ToString
先來看一下Code
void Main()
{
nameof(Weapon.Sword).Dump();
Weapon.Sword.ToString().Dump();
}
public enum Weapon
{
Sword,
Knife,
Dagger,
}
結果都是產生Sword字串
但是還是有差異性
nameof是在編譯時就幫換成字串了 像是 const 常數那樣
ToString 就是執行時候的結果
寫C# 真的很方便 nameof 太棒了
參考
https://blog.darkthread.net/blog/enum-nameof-instead-of-string-constant/